package com.gdust.gkyx.product.controller;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gdust.gkyx.common.result.Result;
import com.gdust.gkyx.model.product.SkuInfo;
import com.gdust.gkyx.product.service.SkuInfoService;
import com.gdust.gkyx.vo.product.SkuInfoQueryVo;
import com.gdust.gkyx.vo.product.SkuInfoVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * ClassName: SkuInfoController
 * Package: com.gdust.gkyx.product.controller
 * Description:sku信息 前端控制器
 *
 * 参考前端src >api >product > skuInfo.js >编写代码
 *
 * @Author syun
 * @Create 2025/1/25 9:22
 * @Version 1.0
 */
@Api(tags = "sku信息")
@RestController
@RequestMapping("/admin/product/skuInfo")
//@CrossOrigin
public class SkuInfoController {
    //注入sku信息表的service
    @Autowired
    private SkuInfoService skuInfoService;

    /**
     *     //sku列表
     * //    url: `${api_name}/${page}/${limit}`,
     * //    method: 'get',
     * //    params: searchObj
     * @param page 当前页
     * @param limit 每页记录数
     * @param skuInfoQueryVo 分页条件
     * @return
     */
    @ApiOperation("sku列表")
    @GetMapping("{page}/{limit}")
    public Result list(@PathVariable Long page,
                       @PathVariable Long limit,
                       SkuInfoQueryVo skuInfoQueryVo) {
        // 创建分页对象
        Page<SkuInfo> pageParam = new Page<>(page,limit);
        // 根据分页条件查询数据
        IPage<SkuInfo> pageModel =
                skuInfoService.selectPageSkuInfo(pageParam,skuInfoQueryVo);
        return Result.ok(pageModel);
    }

    /**
     * //添加商品sku信息
     * //    url: `${api_name}/save`,
     * //    method: 'post',
     * //    data: role
     * @param skuInfoVo  sku信息VO对象
     * @return
     */
    @ApiOperation("添加商品sku信息")
    @PostMapping("save")
    public Result save(@RequestBody SkuInfoVo skuInfoVo) {
        // 添加商品sku信息
        skuInfoService.saveSkuInfo(skuInfoVo);
        return Result.ok(null);
    }


    /**
     * 获取sku信息
     *  //    url: `${api_name}/get/${id}`,
     * //    method: 'get'
     * @param id SKU的ID
     * @return
     */
    @ApiOperation("获取sku信息")
    @GetMapping("get/{id}")
    public Result get(@PathVariable Long id) {
        SkuInfoVo skuInfoVo = skuInfoService.getSkuInfo(id);
        return Result.ok(skuInfoVo);
    }

    /**
     * 修改sku
     *  //    url: `${api_name}/update`,
     * //    method: 'put',
     * //    data: role
     * @param skuInfoVo sku信息VO对象
     * @return
     */
    @ApiOperation("修改sku")
    @PutMapping("update")
    public Result update(@RequestBody SkuInfoVo skuInfoVo) {
        skuInfoService.updateSkuInfo(skuInfoVo);
        return Result.ok(null);
    }

    /**
     * 删除
     * @param id SKU的ID
     * @return
     */
    @ApiOperation(value = "删除")
    @DeleteMapping("remove/{id}")
    public Result remove(@PathVariable Long id) {
        skuInfoService.removeById(id);
        return Result.ok(null);
    }

    /**
     * 根据id列表删除
     * @param idList SKU的ID列表
     * @return
     */
    @ApiOperation(value = "根据id列表删除")
    @DeleteMapping("batchRemove")
    public Result batchRemove(@RequestBody List<Long> idList) {
        //根据id列表删除
        skuInfoService.removeByIds(idList);
        return Result.ok(null);
    }

    /**
     * 商品审核
     *  //    url: `${api_name}/check/${id}/${status}`,
     * //    method: 'get'
     * @param skuId SKU的ID
     * @param status 审核状态：0->未审核；1->审核通过
     * @return
     */
    @ApiOperation("商品审核")
    @GetMapping("check/{skuId}/{status}")
    public Result check(@PathVariable Long skuId,
                        @PathVariable Integer status) {
        //商品审核
        skuInfoService.check(skuId,status);
        return Result.ok(null);
    }

    /**
     * 商品上下架
     *  //    url: `${api_name}/publish/${id}/${status}`,
     * //    method: 'get'
     * @param skuId
     * @param status 上架状态：0->下架；1->上架
     * @return
     */
    @ApiOperation("商品上下架")
    @GetMapping("publish/{skuId}/{status}")
    public Result publish(@PathVariable Long skuId,
                          @PathVariable Integer status) {
        // 调用服务层更新上下架状态
        skuInfoService.publish(skuId,status);
        return Result.ok(null);
    }

    /**
     * //新人专享
     * @param skuId
     * @param status 是否新人专享：0->否；1->是
     * @return
     */
    @GetMapping("isNewPerson/{skuId}/{status}")
    public Result isNewPerson(@PathVariable("skuId") Long skuId,
                              @PathVariable("status") Integer status) {
        skuInfoService.isNewPerson(skuId, status);
        return Result.ok(null);
    }
}
